﻿using System;
using System.Collections.Generic;
using System.Text;
using Vnoss.Language.French;
using Vnoss.Language.French.DAL;
using Vnoss.Language.French.Models;
namespace ConjConsole
{
    class Program
    {
        static void Main(string[] args)
        {
           
            IConjugation iconj = new Conjugation();
            string infinitif;
            IList<Verb> verbes;
            IList<string> likeVerbes;
            int firstsVerbes;

            ///// Lister tous les verbes dans la base
            //foreach (string s in iconj.FindVerbsStartWith("", int.MaxValue))
            //{
            //    Console.Write("{0};", s);
            //}


            Console.WriteLine("Nombre des verbes dans la base : {0}", iconj.CountVerb());

            do
            {
               
              
                Console.Write("Verbe infinitif (rien pour quitter) : ");
                infinitif = Console.ReadLine();
                if (string.IsNullOrEmpty(infinitif))
                    break;
                //Recherche verbe approximatif
                likeVerbes = iconj.FindVerbsStartWith(infinitif, int.MaxValue);
                if (likeVerbes != null && likeVerbes.Count > 1)
                {
                    firstsVerbes = likeVerbes.Count < 10 ? likeVerbes.Count : 10;
                    Console.WriteLine("Il y a {0} verbes commencés par {1}, dont les {2} premiers sont : ", likeVerbes.Count, infinitif, firstsVerbes );
                    for (int i = 0; i < firstsVerbes; i++)
                        Console.WriteLine(" - {0}", likeVerbes[i]);
                    continue;
                }

                try
                {
                    
                    verbes = iconj.Conjugate(infinitif, Mood.Indicative, Tense.Present);
                    if (verbes != null)
                    {
                        Console.Write("Group : {0} - Auxiliaire : {1}", (int)verbes[0].Group, verbes[0].Auxiliary[0]);
                        if (verbes[0].Auxiliary.Count > 1)
                            Console.WriteLine(", {0}", verbes[0].Auxiliary[1]);
                        else
                            Console.WriteLine();
                    }
                    Console.WriteLine("Indicatif présent :");

                   
                    Print(verbes);

                    verbes = iconj.Conjugate(infinitif, Mood.Indicative, Tense.Imperfect);
                    Console.WriteLine("Imparfait :");
                    Print(verbes);

                    verbes = iconj.Conjugate(infinitif, Mood.Indicative, Tense.Future);
                    Console.WriteLine("Futur simple :");
                    Print(verbes);

                    verbes = iconj.Conjugate(infinitif, Mood.Indicative, Tense.SimplePast);
                    Console.WriteLine("Passé simple :");
                    Print(verbes);

                    verbes = iconj.Conjugate(infinitif, Mood.Conditional, Tense.Present);
                    Console.WriteLine("Conditionnel présent :");
                    Print(verbes);

                    verbes = iconj.Conjugate(infinitif, Mood.Subjunctive, Tense.Present);
                    Console.WriteLine("Subjonctif présent :");
                    Print(verbes);

                    verbes = iconj.Conjugate(infinitif, Mood.Subjunctive, Tense.Present);
                    Console.WriteLine("Subjonctif imparfait :");
                    Print(verbes);

                    verbes = iconj.Conjugate(infinitif, Mood.Imperative, Tense.Present);
                    Console.WriteLine("Impératif présent : ");
                    Print(verbes);

                    verbes = iconj.Conjugate(infinitif, Mood.Participle, Tense.Present);
                    Console.WriteLine("Participe présent : ");
                    Print(verbes);

                    verbes = iconj.Conjugate(infinitif, Mood.Participle, Tense.Past);
                    Console.WriteLine("Participe passé : ");
                    Print(verbes);
                }
                catch (Exception exp)
                {
                    Console.WriteLine("Conjugaison impossible");
                }
            } while (true);
        }

        public static void Print(IList<Verb> verbs)
        {
            if(verbs == null)
                Console.WriteLine(" - Pas de conjugaison");
            else
            foreach (Verb v in verbs)
                {
                    Console.WriteLine(" - {0}", v.ToString());
                }

        }

    }
}
